package cn.dankal.basiclib.api;

import java.util.Map;

import cn.dankal.annotations.ApiFactory;
import cn.dankal.basiclib.pojo.AddressEntity;
import cn.dankal.basiclib.pojo.MessageCenterEntity;
import cn.dankal.basiclib.pojo.PhoneOrEmailIsExistBean;
import cn.dankal.basiclib.pojo.SmSReturnBean;
import cn.dankal.basiclib.pojo.UserInfoBean;
import cn.dankal.basiclib.pojo.WXIsBindBean;
import cn.dankal.business.pojo.ActivityBean;
import cn.dankal.business.pojo.BaseBeanList;
import cn.dankal.business.pojo.LisenseBean;
import cn.dankal.business.pojo.NotificationBean;
import cn.dankal.business.pojo.NotifyCountBean;
import cn.dankal.business.pojo.ReasonBean;
import cn.dankal.business.pojo.VerifyCarBean;
import cn.dankal.business.pojo.VersionBean;
import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;

/**
 * Date: 2018/7/27.
 * Time: 17:44
 * classDescription:
 * 个人中心
 *
 * @author fred
 */

@ApiFactory(value = FgBaseApi.class)
public interface UserService {

    /**
     * 登录
     *
     * @return
     */
    @POST("account/login")
    Observable<UserInfoBean> login(@Body Map<String, String> map);

    /**
     * 我预约的活动列表
     * 0待参加 1已结束
     *
     * @param type
     * @return
     */
    @GET("user/operate/get/user/apply_activity_list")
    Observable<BaseBeanList<ActivityBean>> applyActivityList(@Query("type") int type,
                                                             @Query("pageIndex") String pageIndex,
                                                             @Query("pageSize") String pageSize);


    /**
     * 用户预约活动提醒
     *
     * @return
     */
    @GET("user/operate/get/user/apply_remind_list")
    Observable<BaseBeanList<NotificationBean>> apply_remind_list(@Query("pageIndex") String pageIndex,
                                                                 @Query("pageSize") String pageSize);

    /**
     * 用户预约活动提醒
     *
     * @return
     */
    @GET("user/operate/get/user/comment_remind_list")
    Observable<BaseBeanList<NotificationBean>> comment_remind_list(@Query("pageIndex") String pageIndex,
                                                                   @Query("pageSize") String pageSize);


    @GET("user/operate/get/user/score")
    Observable<BaseBeanList<NotificationBean>> score_remind_list(@Query("pageIndex") String pageIndex,
                                                                   @Query("pageSize") String pageSize);
    /**
     * 系统通知
     *
     * @return
     */
    @GET("user/operate/get/user/system/remind_list")
    Observable<BaseBeanList<NotificationBean>> system_remind_list(@Query("pageIndex") String pageIndex,
                                                                  @Query("pageSize") String pageSize);

    /**
     * 系统通知
     *
     * @return
     */
    @GET("user/operate/message/center")
    Observable<MessageCenterEntity> messageCenter();

    /***
     * 关于我们
     *
     * @return
     */
    @GET("user/operate/get/about_details")
    Observable<NotificationBean> about_details();

    /**
     * 消息中心未读数
     *
     * @return
     */
    @GET("user/operate/get/user/message_list")
    Observable<NotifyCountBean> message_list();

    /**
     * 车辆认证列表
     *
     * @param map
     * @return
     */
    @POST("user/operate/get/user/vehicle_info_list")
    Observable<BaseBeanList<VerifyCarBean>> vehicle_info_list(@Body Map<String, String> map);

    /**
     * 提交车辆认证消息
     *
     * @return
     */
    @POST("user/operate/user_auth_vehicle")
    Observable<UserInfoBean> user_auth_vehicle(@Body VerifyCarBean verifyCarBean);


    /**
     * 微信登录检测是否绑定
     *
     * @return
     */
    @POST("account/isBinding")
    @FormUrlEncoded
    Observable<WXIsBindBean> isBind(@Field("code") String code);


    /**
     * 微信登录
     *
     * @param map
     * @return
     */
    @POST("account/wx/login")
    Observable<UserInfoBean> wxLogin(@Body Map<String, String> map);

    /**
     * 绑定或者修改手机号
     *
     * @param map
     * @return
     */
    @POST("user/operate/update/user_phone")
    Observable<ReasonBean> updateUserPhone(@Body Map<String, String> map);


    /**
     * 用户认证车辆信息列表
     *
     * @return
     */
    @GET("user/operate/get/user/vehicle_info_list")
    Observable<BaseBeanList<LisenseBean>> vehicle_info_list(@Query("pageIndex") String pageIndex,
                                                            @Query("pageSize") String pageSize);


    @GET("user/operate/get/user_info")
    Observable<UserInfoBean> user_info();



    @GET("user/operate/user/info/{userUuid}")
    Observable<UserInfoBean> userInfoByUuid(@Path("userUuid") String userUuid);

    @GET("user/operate/user/{phone}")
    Observable<UserInfoBean> userByPhone(@Path("phone") String phone);

    @GET("user/operate/invite/user")
    Observable<String> inviteUser(@Query("businessUuid") String businessUuid,
                                  @Query("logType") String logType);

    /**
     * 检查验证码
     *
     * @param valid 手机或者邮箱
     * @param type  0手机 1邮箱
     * @param code  验证码
     * @return
     */
    @GET("account/validation/code/{valid}/{type}")
    Observable<ReasonBean> validationCode(@Path("valid") String valid,
                                          @Path("type") String type,
                                          @Query("code") String code);

    /**
     * 修改用户名
     *
     * @param name
     * @return
     */
    @POST("user/operate/update/user_name")
    @FormUrlEncoded
    Observable<ReasonBean> changeName(@Field("name") String name);

    /**
     * 修改性别
     *
     * @param name
     * @return
     */
    @POST("user/operate/update/user_sex")
    @FormUrlEncoded
    Observable<ReasonBean> changeSex(@Field("sex") String sex);

    /**
     * 修改用车城市
     * {
     * "carCity": "string",
     * "carProvince": "string"
     * }
     *
     * @param name
     * @return
     */
    @POST("user/operate/update/user_city")
    Observable<ReasonBean> changeCity(@Body Map<String, Object> params);

    /**
     * 修改兴趣爱好
     * {
     * "interest": [
     * "string"
     * ]
     * }
     *
     * @param name
     * @return
     */
    @POST("user/operate/update/user_interest")
    Observable<ReasonBean> changeInterest(@Body Map<String, Object> params);

    /**
     * 修改邮箱
     * "code": "验证码",
     * "fgToken": "飞歌token",
     * "newEmail": "邮箱",
     * "userId": "飞歌userId"
     *
     * @return
     */
    @POST("user/operate/update/user_email")
    Observable<ReasonBean> changeEmail(@Body Map<String, String> map);

    /**
     * 修改头像
     *
     * @param avatar
     * @return
     */
    @POST("user/operate/update/user_avatar")
    @FormUrlEncoded
    Observable<ReasonBean> changeAvatar(@Field("avatar") String avatar);


    /**
     * 发送验证码
     */
    @GET("account/send/code/{valid}/{type}")
    Observable<ReasonBean> obtainVerifyCode(@Path("valid") String valid, @Path("type") String type);


    /**
     * 注册
     *
     * @return
     */
    @POST("account/register")
    Observable<UserInfoBean> submitRegistered(@Body Map<String, String> map);

    /**
     * 忘记密码 - 通过验证码重置密码接口
     *
     * @return
     */
    @POST("account/reset_password")
    Observable<UserInfoBean> reset_password(@Body Map<String, String> map);

    /**
     * 反馈
     * "content": "内容",
     * "imgUrl": "照片组合数组"
     *
     * @param map
     * @return
     */
    @POST("user/operate/user_feedback")
    Observable<ReasonBean> feedback(@Body Map<String, Object> map);


    /**
     * 密码修改
     * "confirmPassword": "确认密码",
     * "newPassword": "新密码",
     * "oldPassword": "旧密码",
     * "userId": "飞歌userId"
     *
     * @return
     */
    @POST("user/operate/update/user_password")
    Observable<ReasonBean> resetPassword(@Body Map<String, String> map);


    /**
     * 校验注册验证码
     *
     * @param map
     * @return
     */
    @POST("account/register_sms_code")
    Observable<SmSReturnBean> registerSkip(@Body Map<String, String> map);


    /****
     * 检查手机/邮箱是否注册过
     * author: wuqianrui
     * @param phone
     * @param type  0手机 1邮箱
     * @return
     */
    @GET("account/phoneOrEmailIsExist/{phone}/{type}")
    Observable<PhoneOrEmailIsExistBean> phoneOrEmailIsExist(@Path("phone") String phone, @Path("type") int type);

    /**
     * 提醒list uuid集合
     *
     * @param list
     * @param sort 0系统 1预约 2评论
     * @param type 0读取提醒 1删除提醒
     * @return
     */
    @POST("user/operate/update_remind")
    Observable<ReasonBean> update_remind(@Body Map<String, Object> map);

    /**
     * 获取版本号
     *
     * @return
     */
    @GET("user/operate/get/app_version")
    Observable<VersionBean> getAppVersion();

    /**
     * 获取用户信息
     */
    @GET("user/operate/get/user_info")
    Observable<UserInfoBean> getUserInfo();


    /**
     * 获取用户信息
     */
    @GET("frontapi/user-addresses")
    Observable<AddressEntity> getUserAddress();


}
